←
▼
▲
Dim g_Finalizing as boolean
グローバル変数の後始末処理を行っているときかどうか。
(src)
参考
←
▼
▲
→ vbslib_helper_src フォルダー
VBScript だけではできないが、C言語ではできる機能を実行するプログラムです。
vbslib の内部から必要に応じて自動的に起動されます。
vbslib_helper.exe ファイルは、
に格納してください。
ソース
←
▼
▲
VBScript global code
'// start of vbslib include
Execute g_f.ReadAll
ResumePush
On Error Resume Next
main / main2
ResumePop
[メイン.vbs]
[vbs_inc.vbs]
Execute g_f.ReadAll
[vbs_inc_sub.vbs]
VBScript global code
ChangeScriptMode
'//=== read and execute g_IncludePathes
CallInitializeInModules
VBScript global code
場合によっては コマンドプロンプトを起動する
(src)
(src)
CallFinalizeInModules
モジュールの初期化をする
モジュールの後始末をする
メイン・スクリプト
関連
設定ファイルをロード(実行)する
モジュールをロード(実行)する
あるフォルダの中あるすべてのスクリプトの既定の設定
(src)
g_sh.Run cmd
'//=== Make command line
WScript.Echo Err.Description
エラーメッセージを表示する
If g_CommandPrompt = 1 Then
WScript.Sleep 2000
←
▼
▲
main 関数からそのまま返ると、エラーレベルは 21 になります。
これは、wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、
エラーレベルは 0 になっており、正常に終了したかどうかを区別するためです。
内部フロー
main
ResumePop
CallFinalizeInModules
If not IsEmpty( g_ExitCode ) Then WScript.Quit g_ExitCode
WScript.Quit 21
エラーレベルを指定するときは、WScript.Quit を呼び出すか、g_ExitCode に設定してください。
コンパイルするときに使われることがあるメイクファイルは、起動したコマンドのエラーレベルが 0
ではないときは、エラーが発生したものとみなしますが、vbslib を使ったスクリプトが正常終了した
ときは、エラーレベルが 21 になるため、メイクファイルは処理を中断してしまいます。
正常終了したときに、エラーレベルが 0 になるようにするには、/SuccessRet:0
オプションを指定して vbs を起動してください。 ただし、ごくまれに vbslib がキャッチ
できないエラーが発生することがありますが、そのときは、エラーレベルが 0 になるため、
正常終了と区別することはできません。
cscript sampe.vbs /SuccessRet:0
テスト
(src)
コマンドプロンプトを自動的に閉じるかどうか
関連
←
▼
▲
main 関数の中でエラーが発生したら、標準化されたエラーメッセージを表示し、
適切なエラーレベルを、wscript.exe / cscript.exe を呼び出したプロセスへ返します。
wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、エラーレベルは
0 になっています。 これではエラーが発生したかどうかがわからないので、vbs_inc
がエラーをキャッチして、エラー番号をエラーレベルにします。
文法エラーが発生したときは、エラーレベルが 1 になります。
(src)
関連
←
▼
▲
処理フロー
VBScript global code
[vbs_inc_sub.vbs]
[メイン.vbs]
[vbs_inc_setting.vbs など]
SetVar
main / main2
SetVar
1つのスクリプトで使う設定
ClassI_validate
new ClassA
Class_Initialize
Me.Ver = CInt2( GetVar( "ClassA_Ver" ) )
If IsEmpty( Me.Value ) Then Me.Ver = 200
数値を自動的に
設定する
環境変数
If IsEmpty( g_ClassI ) Then
Dim name : name = GetVar( "ClassI" )
If IsEmpty( name ) Then
... (自動判定ルーチン)
name = "ClassA"
End If
Select Case name
Case "ClassA" : Set g_ClassI = new ClassA
Case "ClassB" : Set g_ClassI = new ClassB
End Select
Set ClassI_validate = g_ClassI
End If
インスタンスを
自動的に
選択する
設定値を指定するときは、main または
デフォルト(自動判定など)の設定値を使うときは、SetVar を使いません。
優先度の高いものから並べると、main 関数の SetVar > setting の SetVar > OS の環境変数
> 自動選択、の順になります。
デフォルト値の決定方法は、
次のものがあります。
・固定値
・設定ファイルからのリード
・自動判定
環境変数の値を使った後は、SetVar をしても無効なので、SetVar は main 関数の
最初で呼び出してください。
を使います。
で
インスタンスを特定する必要が無い
どの設定ファイルを使うか、などを選択するときに、環境変数を使います。
一般的な設定値は、環境変数ではなく、 XML 形式などの設定ファイルや、
の、どのバージョンを使うか、
を使ったほうが、階層化できたりして扱いやすいです。
関連
OS の環境変数の設定
関数コールのリダイレクト
ファイルに書かれた環境変数の集合を使う
InitializeModule
SetVar
あるフォルダの中にあるスクリプトの
既定の設定(scriptlib フォルダごと)
Setting_getIncludePathes
g_Vers.Add "Disable", 1
あるフォルダの中にある
スクリプトの InitializeModule で
設定される内容の選択
g_Vers.Add "Disable", 1
1つのスクリプトで使う InitializeModule
で設定される内容の選択
関連
Test.vbs で共通の環境変数とファイルのチェック
スクリプト内で共通の設定値
←
▼
▲
Function IsDefined( Symbol as string ) as boolean
指定したシンボルの関数が定義されているかどうかを返します。
(src)
サンプル:
If not IsDefined( "copy" ) Then ...
参考
関連
ソース
→ vbs_inc_sub.vbs
←
▼
▲
Dim g_Vers as Scripting.Dictionary
各種バージョン番号、または、設定に関する辞書です。
[ テスト ]
(src)
関連
値は文字列や数値やオブジェクトなどを格納できます。
で設定される変数と同じ変数の領域(Dictionary)です。 (vbslib ver4 より)
を使うことができます。
辞書のキーは、左にあるツリーの子ノードを参照してください。
例:
←
▼
▲
g_f = g_Vers.Item("vbslib")
If g_f >= 4.9 Then
g_Vers.Item("vbslib") = 4.9
g_vbslib_path = g_vbslib_folder + "vbslib\vbs_inc_sub.vbs"
ElseIf g_f >= 4.0 Then
g_vbslib_path = g_vbslib_folder + "vbslib400\vbs_inc_400.vbs"
ElseIf g_f >= 3.0 Then
g_vbslib_path = g_vbslib_folder + "vbslib300\vbs_inc_300.vbs"
ElseIf g_f >= 2.0 Then
g_vbslib_path = g_vbslib_folder + "vbs_inc_200.vbs"
Else
g_vbslib_path = g_vbslib_folder + "vbslib000\vbs_inc_000.vbs"
End If
判定サンプル
バージョンの判定は、不等号を使ってください。
Sub SetupVbslibParameters()
'--- start of parameters for vbslib include -------------------------------
g_Vers("vbslib_ver") = 99.99
:
'--- end of parameters for vbslib include ---------------------------------
End Sub
0.0 … バージョン切り替えテスト用
2.0 … ver2.00 をそのまま使う (vbs_inc のデフォルト)
3.0 … ver3.00 を使う
4.0 … ver4.00 を使う
99.99 … 最新を使う
vbs_inc.vbs から vbslib をインクルード開始する時点で、実際に使用するバージョン
番号に変わります。 それまでは、メイン.vbs が要求する番号です。
上記のように決めていますが、実際の動きは下記の vbs_inc.vbs の内容によります。
設定サンプル
参考
テスト
→ T_Var.vbs # T_g_Vers_Stack
vbslib のバージョン番号です。
Dim g_Vers("vbslib") as dictionary
値の意味
vbs_inc.vbs の一部
←
▼
▲
→ T_Path.vbs
→ PC_setting_default.vbs
T_TextFileExtension
Dim g_Vers("TextFileExtension") as dictionary
テスト
ソース
テキスト・ファイルの拡張子をキーとした辞書。
大文字と小文字を区別しません。
の PC_setting_default.vbs などで設定します。
サンプル
If g_Vers("TextFileExtension").Exists( "xml" ) Then
extension = g_fs.GetExtensionName( path )
If g_Vers("TextFileExtension").Exists( extension ) Then
テキスト・ファイルの拡張子であるか判断する。
サンプル
辞書を作成する
Set g_Vers("TextFileExtension") = Dic_addFromArray( Empty, Array( _
"txt", _
"c", "h", "cpp", "hpp", "vbs", "js", "py", "rb", _
"ini", "log", _
"html", "htm", "xml", "svg" ), True )
関連
←
▼
▲
Dim g_Vers("NaturalDocsExtension") as dictionary
NaturalDocs に入力できるファイルの拡張子をキーとした辞書。
で使われます。
この辞書が
この辞書の使い方は、
と同じです。
にないときは、デフォルトの設定を使って処理されます。
←
▼
▲
Dim g_Vers("CutPropertyM") as string
関連
True なら Name プロパティを、False なら m_Name プロパティを使います。
g_Vers("CutPropertyM") = False
キーワード:
サンプル
ライブラリが提供するいくつかの関数の中で使われるオブジェクトに対して、Name プロパティを
参照するか、m_Name プロパティを参照するかを選べます。
デフォルトは、True です。
←
▼
▲
Dim g_is_vbslib_for_fast_user as boolean
メジャー バージョンアップで採用される予定の暫定機能を使うかどうか。
暫定機能の仕様は変わる可能性があります。
この変数は、通常
で設定します。
→ _src\Test\FastUser.vbs
サンプル
Empty のときは、
でユーザーに確認が求められます。
サンプル
Sub T_NewFunction( Opt, AppKey )
If g_is_vbslib_for_fast_user Then
'// Test
End If
Pass
End Sub
暫定機能のテスト プログラムは、スキップします。
サンプル
暫定機能
Sub NewFunction()
Confirm_VBS_Lib_ForFastUser
'// Function
End Sub
is_fast_back_up = g_is_vbslib_for_fast_user
g_is_vbslib_for_fast_user = True
'// 暫定機能
g_is_vbslib_for_fast_user = is_fast_back_up
内部の修正で暫定機能を使うようになったとき、一時的に有効にします。
サンプル
←
▼
▲
Sub Confirm_VBS_Lib_ForFastUser()
メジャー バージョンアップで採用される予定の暫定機能を使うことをユーザーに確認します。
暫定機能の仕様は変わる可能性があります。
OK を押すと
= True に設定して処理を継続します。
ソース
→ vbslib.vbs
g_is_vbslib_for_fast_user = True のときは、ユーザーに確認しません。
←
▼
▲
Sub ThisIsOldSpec()
現在実行している関数が、廃止されようとしている関数であることを警告します。
ファイル:
vbs_inc_sub.vbs
(src)
g_debug <> 0 のときは、初めて ThisIsOldSpec を呼び出したときにブレークします。
関連
←
▼
▲
Dim g_cut_old as boolean
vbslib の古い関数を呼び出したときに、デバッガでブレークするようにします。
参考
(src)
vbslib のユーザーのサンプル:
g_cut_old = True
If g_cut_old Then Stop :If g_cut_old=I_CutOldErr Then Error
vbslib の作成者のサンプル:
デフォルトは True になります。
False にするには、
'--- start of parameters for vbslib include -------------------------------
Dim g_cut_old : g_cut_old = False
に次のように記述してください。
g_cut_old は、廃止されました。 代わりに ThisIsOldSpec を使ってください。
←
▼
▲
Sub SetErrorOfOldSpec()
ThisIsOldSpec が呼ばれたら、エラーにするように設定します。
ファイル:
vbs_inc_sub.h
(src)
関連
←
▼
▲
SetNotErrorOfOldSpec
Sub SetNotErrorOfOldSpec()
ThisIsOldSpec が呼ばれても、エラーにしないように設定します。
ファイル:
vbs_inc_sub.h
関連
(src)
←
▼
▲
Function GetOSVersion() as double
Windows の内部バージョンを返します。
5.0 = Windows 2000
5.1 = Windows XP
6.0 = Windows Vista
6.1 = Windows 7
6.2 = Windows 8
6.3 = Windows 8.1
10 = Windows 10
(src)
関連
←
▼
▲
set_ "FooVar", "1"
サンプル:
Sub SetVar( Symbol as string, Value as variant )
vbslib の環境変数を設定します。
【引数】
Symbol
Value
変数名
設定する値、Empty = 変数を未定義にする
関連
(src)
set_ は、OS の環境変数には設定されます。
SetVar は、OS の環境変数には設定されません。そのため、RunProg などで
子プロセスを起動しても、伝達されません。
その代わり、文字列以外(数値や配列など)を設定することができます。
set_ も SetVar も、env を使って参照することができます。
set_ を実行すると、同じ名前のローカル環境の変数が削除されます。(2016-08-18より)
注意
環境変数はグローバル変数と同じなので、なるべく使わないでください。
下記のいずれかが使用できないか検討してください。
・設定関数
・オブジェクトのメソッド、プロパティ
→ clib の環境変数
→ T_Var フォルダ
テスト
Sub set_( Symbol as string, Value as string )
SetVar "FooVar", 1
(src)
→ T_Var フォルダ
テスト
OS の環境変数
PATH 環境変数の追加
←
▼
▲
v = GetVar( "FooVar" )
サンプル:
Function GetVar( Symbol as string ) as variant
vbslib の環境変数の値を返します。
【引数】
Symbol
返り値
変数名
Symbol に指定した環境変数の値
関連
(src)
値を設定していない環境変数を指定したときは、エラーが発生するのではなく、Empty を返し
ます。
OS の環境変数を指定することもできます。
→ T_Var フォルダ
テスト
T_Var1
T_Var2
変数名に % を付けたものを指定した場合、% が無い変数名の値が返ります。
GetVar( "FooVar" ) = GetVar( "%FooVar%" )
←
▼
▲
(src)
SetVarBreak "FooVar", Empty
サンプル:
Sub SetVarBreak( Symbol as string, Opt as Empty )
vbslib の環境変数の値を設定、または参照しているところでブレークするように設定します。
【引数】
Symbol
Opt
変数名
Empty を指定してください
関連
←
▼
▲
Sub FuncA()
Set v_= new VarStack
set_ "Foo2", "2a"
SetVar "Foo3", 3
g_Vers "Foo4", 1
End Sub '// 元の環境変数の値に戻る
オブジェクトが破棄されるタイミングで、環境変数の値を元に戻します。
下記の場合、関数から抜けると戻します。
(src)